const express = require('express');
const router = express.Router();
const User = require('../models/User');

// 获取所有用户
router.get('/', async (req, res) => {
  try {
    const users = await User.findAll();
    res.json({
      code: 200,
      msg: '获取用户列表成功',
      data: users,
      total: users.length
    });
  } catch (error) {
    res.status(500).json({
      code: 500,
      msg: error.message
    });
  }
});

// 根据状态获取用户
router.get('/status/:status', async (req, res) => {
  try {
    const { status } = req.params;
    if (!['active', 'inactive'].includes(status)) {
      return res.status(400).json({
        code: 400,
        msg: '状态参数无效，请使用 active 或 inactive'
      });
    }
    
    const users = await User.findByStatus(status);
    res.json({
      code: 200,
      msg: `获取${status}状态用户成功`,
      data: users,
      total: users.length
    });
  } catch (error) {
    res.status(500).json({
      code: 500,
      msg: error.message
    });
  }
});

// 根据ID获取用户
router.get('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    
    // 验证ID是否为数字
    if (!/^\d+$/.test(id)) {
      return res.status(400).json({
        code: 400,
        msg: '用户ID必须为数字'
      });
    }
    
    const user = await User.findById(id);
    if (!user) {
      return res.status(404).json({
        code: 404,
        msg: '用户不存在'
      });
    }
    
    res.json({
      code: 200,
      msg: '获取用户信息成功',
      data: user
    });
  } catch (error) {
    res.status(500).json({
      code: 500,
      msg: error.message
    });
  }
});

// 创建新用户
router.post('/', async (req, res) => {
  try {
    const { name, email, phone, age } = req.body;
    
    // 验证必填字段
    if (!name || !email) {
      return res.status(400).json({
        code: 400,
        msg: '姓名和邮箱为必填项'
      });
    }
    
    // 验证邮箱格式
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(email)) {
      return res.status(400).json({
        code: 400,
        msg: '邮箱格式不正确'
      });
    }
    
    // 验证年龄
    if (age !== undefined && (age < 0 || age > 150)) {
      return res.status(400).json({
        code: 400,
        msg: '年龄必须在 0-150 之间'
      });
    }
    
    // 检查邮箱是否已存在
    const existingUser = await User.findByEmail(email);
    if (existingUser) {
      return res.status(400).json({
        code: 400,
        msg: '该邮箱已被使用'
      });
    }
    
    const userId = await User.create({ name, email, phone, age });
    res.status(201).json({
      code: 201,
      msg: '用户创建成功',
      data: { id: userId, name, email, phone, age, status: 'active' }
    });
  } catch (error) {
    if (error.code === 'ER_DUP_ENTRY') {
      res.status(400).json({
        code: 400,
        msg: '邮箱已存在'
      });
    } else {
      res.status(500).json({
        code: 400,
        msg: error.message
      });
    }
  }
});

// 更新用户
router.put('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const { name, email, phone, age, status } = req.body;
    
    // 验证ID
    if (!/^\d+$/.test(id)) {
      return res.status(400).json({
        code: 400,
        msg: '用户ID必须为数字'
      });
    }
    
    // 检查用户是否存在
    const existingUser = await User.findById(id);
    if (!existingUser) {
      return res.status(404).json({
        code: 404,
        msg: '用户不存在'
      });
    }
    
    // 验证邮箱格式（如果提供）
    if (email) {
      const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
      if (!emailRegex.test(email)) {
        return res.status(400).json({
          success: false,
          error: '邮箱格式不正确'
        });
      }
      
      // 检查邮箱是否被其他用户使用
      const emailUser = await User.findByEmail(email);
      if (emailUser && emailUser.id != id) {
        return res.status(400).json({
          success: false,
          error: '该邮箱已被其他用户使用'
        });
      }
    }
    
    // 验证年龄
    if (age !== undefined && (age < 0 || age > 150)) {
      return res.status(400).json({
        code: 400,
        msg: '年龄必须在 0-150 之间'
      });
    }
    
    // 验证状态
    if (status && !['active', 'inactive'].includes(status)) {
      return res.status(400).json({
        code: 400,
        msg: '状态只能是 active 或 inactive'
      });
    }
    
    const updated = await User.update(id, {
      name: name || existingUser.name,
      email: email || existingUser.email,
      phone: phone !== undefined ? phone : existingUser.phone,
      age: age !== undefined ? age : existingUser.age,
      status: status || existingUser.status
    });
    
    if (!updated) {
      return res.status(400).json({
        code: 400,
        msg: '更新失败'
      });
    }
    
    res.json({
      code: 200,
      msg: '用户更新成功'
    });
  } catch (error) {
    if (error.code === 'ER_DUP_ENTRY') {
      res.status(400).json({
        code: 400,
        msg: '邮箱已存在'
      });
    } else {
      res.status(500).json({
        code: 400,
        msg: error.message
      });
    }
  }
});

// 删除用户
router.delete('/:id', async (req, res) => {
  try {
    const { id } = req.params;
    
    // 验证ID
    if (!/^\d+$/.test(id)) {
      return res.status(400).json({
        code: 400,
        msg: '用户ID必须为数字'
      });
    }
    
    const deleted = await User.delete(id);
    if (!deleted) {
      return res.status(404).json({
        code: 404,
        msg: '用户不存在'
      });
    }
    
    res.json({
      code: 200,
      msg: '用户删除成功'
    });
  } catch (error) {
    res.status(500).json({
      code: 500,
      msg: error.message
    });
  }
});

module.exports = router;
